import com.mongodb.MongoClient; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import com.mongodb.DBCursor; import java.net.UnknownHostException; import java.sql.*; public class edx_to_moodle_course_synchronisation { static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost/moodle"; static final String USER = "root"; static final String PASS = "root"; public static void main(String[] args) throws ClassNotFoundException, UnknownHostException { // load the sqlite-JDBC driver using the current class loader Class.forName("org.sqlite.JDBC"); Class.forName("com.mysql.jdbc.Driver"); String resd = "", sql = ""; Connection conn = null; //mysql connection Connection connection = null; //sqlite connection try { conn = DriverManager.getConnection(DB_URL, USER, PASS); // create a database connection connection = DriverManager.getConnection("jdbc:sqlite:/home/rajarshi/edx_all/db/edx.db"); Statement stmt = conn.createStatement(); //mysql statement Statement statement = connection.createStatement(); statement.setQueryTimeout(30); // set timeout to 30 sec. //read from edx ResultSet rs = statement.executeQuery("select course_id from student_courseaccessrole where id = (select max(id) from student_courseaccessrole)"); String course_id = rs.getString("course_id"); String[] temp; String delimiter = "/"; temp = course_id.split(delimiter); //System.out.println(temp[0]+ " " + temp[1] + " " +temp[2]); //To connect to mongodb server MongoClient mongoClient = new MongoClient("localhost", 27017); //Now connect to your databases DB db = mongoClient.getDB("xmodule"); //System.out.println("Connection to Database Successfull"); DBCollection coll = db.getCollection("modulestore"); //System.out.println("Collection Selected Successfull"); BasicDBObject query = new BasicDBObject("_id.category", "course").append("_id.course", temp[1]); //BasicDBObject query = new BasicDBObject("_id.category", "course").append("_id.course", "CS201"); DBCursor cursor = coll.find(query); String result = ""; while (cursor.hasNext()) { DBObject tobj = cursor.next(); result = tobj.get("metadata").toString(); } String[] temp1 = result.split(":"); String resa = temp1[14]; String[] resb = resa.split(","); //System.out.print(resb[0]); String resc = resb[0]; resd = resc.substring(2, resc.length() - 2); //System.out.print("Course Name: " +resd); cursor.close(); String coursename = resd; String shortname = generateInitials(coursename); String idtomatch = ""; //read from moodle rs = stmt.executeQuery("select idnumber from mdl_course where id = (select max(id) from mdl_course)"); while (rs.next()) { idtomatch = (String) rs.getString("idnumber").toString(); } if (temp[1].compareTo(idtomatch) != 0) { //write into moodle(mdl_course) sql = "insert into mdl_course (category,fullname,shortname,sortorder,idnumber,summary,summaryformat,showgrades,newsitems,startdate,marker,maxbytes,legacyfiles,showreports,visible,visibleold,groupmode,groupmodeforce,defaultgroupingid,timecreated,timemodified,requested,enablecompletion,completionnotify)" + "values (1,'" + coursename + "','" + shortname + "',10000,'" + temp[1] + "','Course Summary has not been entered',1,1,5,1609353000,0,0,0,0,1,1,0,0,0,0,0,0,0,0)"; // startdate (31/12/2020)= 1609353000 stmt.executeUpdate(sql); stmt.executeUpdate("update mdl_course set sortorder=sortorder+1"); stmt.executeUpdate("update mdl_course set sortorder=1 where id=1;"); } } catch (SQLException e) { // if the error message is "out of memory", it probably means no database file is found System.err.println(e.getMessage()); } finally { try { if (connection != null) connection.close(); } catch (SQLException e) { // connection close failed. System.err.println(e); } } } public static String generateInitials(String original) { String initial = ""; String[] split = original.split(" "); for (String value: split) { initial += value.substring(0, 1); } return initial.toUpperCase(); } }